package com.yzycoc.util;

import javax.swing.*;
import java.awt.*;

/**
 * 图像生成 工具集
 * @author yao
 * @version 1.0
 **/
public class ImageUtils {
    /***
     * 文字自动换行
     * @param g 需要处理的源文件
     * @param font 文本类型
     * @param texts 原始文本
     * @param x 起始X轴
     * @param y 起始Y轴
     * @param maxWidth 允许最大长度
     */
    public static void drawString(Graphics2D g , Font font , String texts , int x , int y , int maxWidth) {
        //字符串的宽
        String[] split = texts.split("\\n");
        for (String text : split) {
            JLabel label = new JLabel(text);
            label.setFont(font);
            FontMetrics metrics = label.getFontMetrics(label.getFont());
            int textH = metrics.getHeight();
            int textW = metrics.stringWidth(label.getText());
            String tempText = text;
            if(textW > maxWidth){
                while(textW > maxWidth) {
                    int n = textW / maxWidth;
                    int subPos = tempText.length() / n;
                    String drawText = tempText.substring(0 , subPos);
                    int subTxtW = metrics.stringWidth(drawText);
                    while(subTxtW > maxWidth) {
                        subPos--;
                        drawText = tempText.substring(0 , subPos);
                        subTxtW = metrics.stringWidth(drawText);
                    }
                    g.drawString(drawText , x , y);
                    y += textH;
                    textW = textW - subTxtW;
                    tempText = tempText.substring(subPos);
                }
            }else{
                g.drawString(tempText , x , y);
                y+=textH;
            }
        }
    }

    /***
     * 文字居中
     * @param g Graphics2D
     * @param font Font
     * @param text 文本内容
     * @param x    起始点X轴坐标
     * @param y    起始点Y轴坐标
     * @param maxWidth  文字最大长度
     */
    public static void content(Graphics2D g , Font font , String text , int x , int y , int maxWidth) {
        FontMetrics fontMetrics = g.getFontMetrics(font);
        int textWidth = fontMetrics.stringWidth(text);
        int X = (maxWidth - textWidth) / 2;
        g.drawString(text,x+X,y);
    }

    /***
     * 文字自适应大小
     * @param g Graphics2D
     * @param name 字体名称
     * @param style 字体样式
     * @param size 字体大小
     * @param text 文本内容
     * @param x 起始点X轴坐标
     * @param y 起始点Y轴坐标
     * @param maxWidth 文字最大长度
     */
    public static void selfAdaption(Graphics2D g ,String name, int style, int size , String text , int x , int y , int maxWidth) {
        if(text == null || text.length() ==0){
            return;
        }
        Font font = new Font(name,style,size);
        JLabel label = new JLabel(text);
        label.setFont(font);
        FontMetrics metrics = label.getFontMetrics(label.getFont());
        int textW = metrics.stringWidth(label.getText());
        if(textW > maxWidth){
            font = new Font(name,style,(textW/size/maxWidth));
        }
        g.setFont(font);
        g.drawString(text,x,y);

    }

}
